<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Git & Npm 常用指令 | 青山依旧的网络日记</title>
    <meta name="description" content="记录web前端那些事">
    <link rel="stylesheet" href="/note/assets/style.44cf3921.css">
    <link rel="modulepreload" href="/note/assets/chunks/VPAlgoliaSearchBox.e8a13dea.js">
    <link rel="modulepreload" href="/note/assets/chunks/ui-custom.8a747abb.js">
    <link rel="modulepreload" href="/note/assets/app.6518bc14.js">
    <link rel="modulepreload" href="/note/assets/node_git-npm.md.94662dbd.lean.js">
    
    <meta name="keywords" content="jsdawn,青山依旧,网络日记,笔记,web前端,js,vue,vite">
  <link rel="icon" href="/note/logo.svg">
  <script>(()=>{const e=localStorage.getItem("vitepress-theme-appearance"),a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
  </head>
  <body>
    <div id="app"><div class="Layout" data-v-c66ff1de><!--[--><!--]--><!--[--><span tabindex="-1" data-v-954d4690></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-954d4690> Skip to content </a><!--]--><!----><header class="VPNav" data-v-c66ff1de data-v-f9fa4498><div class="VPNavBar has-sidebar" data-v-f9fa4498 data-v-d7d748c2><div class="container" data-v-d7d748c2><div class="VPNavBarTitle has-sidebar" data-v-d7d748c2 data-v-01b9aac6><a class="title" href="/note/" data-v-01b9aac6><!--[--><img class="VPImage logo" src="/note/logo.svg" data-v-67b84fc0><!--]--><!--[-->青山依旧的网络日记<!--]--></a></div><div class="content" data-v-d7d748c2><div class="VPNavBarSearch search" data-v-d7d748c2><div id="docsearch"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key">Meta</kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-d7d748c2 data-v-654db621><span id="main-nav-aria-label" class="visually-hidden" data-v-654db621>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/note/guide/vue3-upgrade.html" data-v-654db621 data-v-7561f494 data-v-32407edf><!--[-->前端指南<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-654db621 data-v-bf49c558><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-bf49c558><span class="text" data-v-bf49c558><!----> 踩坑心得 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-bf49c558><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-bf49c558><div class="VPMenu" data-v-bf49c558 data-v-0f64c8d2><div class="items" data-v-0f64c8d2><!--[--><!--[--><div class="VPMenuLink" data-v-0f64c8d2 data-v-087d3aaa><a class="VPLink link" href="/note/feelings/el-date-picker.html" data-v-087d3aaa data-v-32407edf><!--[-->Element UI 系列<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-0f64c8d2 data-v-087d3aaa><a class="VPLink link" href="/note/feelings/a-upload.html" data-v-087d3aaa data-v-32407edf><!--[-->Ant design vue 系列<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-0f64c8d2 data-v-087d3aaa><a class="VPLink link" href="/note/feelings/echarts-wordcloud.html" data-v-087d3aaa data-v-32407edf><!--[-->Echarts 系列<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/note/node/git-npm.html" data-v-654db621 data-v-7561f494 data-v-32407edf><!--[-->Git/Node<!--]--><!----></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/note/tale/hexo-create.html" data-v-654db621 data-v-7561f494 data-v-32407edf><!--[-->青山物语<!--]--><!----></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-d7d748c2 data-v-79082d9f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-label="toggle dark mode" data-v-79082d9f data-v-47f2e383 data-v-9ae3dd98><span class="check" data-v-9ae3dd98><span class="icon" data-v-9ae3dd98><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-47f2e383><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-47f2e383><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-d7d748c2 data-v-6745ff8f data-v-b7a19e6a><!--[--><a class="VPSocialLink" href="https://github.com/jsdawn" title="github" target="_blank" rel="noopener noreferrer" data-v-b7a19e6a data-v-205dd35e><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-205dd35e><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg><span class="visually-hidden" data-v-205dd35e>github</span></a><a class="VPSocialLink" href="https://juejin.cn/user/2101921962267079/posts" title="slack" target="_blank" rel="noopener noreferrer" data-v-b7a19e6a data-v-205dd35e><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-205dd35e><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg><span class="visually-hidden" data-v-205dd35e>slack</span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-d7d748c2 data-v-7bb88228 data-v-bf49c558><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bf49c558><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-bf49c558><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-bf49c558><div class="VPMenu" data-v-bf49c558 data-v-0f64c8d2><!----><!--[--><!--[--><!----><div class="group" data-v-7bb88228><div class="item appearance" data-v-7bb88228><p class="label" data-v-7bb88228>Appearance</p><div class="appearance-action" data-v-7bb88228><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-label="toggle dark mode" data-v-7bb88228 data-v-47f2e383 data-v-9ae3dd98><span class="check" data-v-9ae3dd98><span class="icon" data-v-9ae3dd98><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-47f2e383><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-47f2e383><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-7bb88228><div class="item social-links" data-v-7bb88228><div class="VPSocialLinks social-links-list" data-v-7bb88228 data-v-b7a19e6a><!--[--><a class="VPSocialLink" href="https://github.com/jsdawn" title="github" target="_blank" rel="noopener noreferrer" data-v-b7a19e6a data-v-205dd35e><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-205dd35e><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg><span class="visually-hidden" data-v-205dd35e>github</span></a><a class="VPSocialLink" href="https://juejin.cn/user/2101921962267079/posts" title="slack" target="_blank" rel="noopener noreferrer" data-v-b7a19e6a data-v-205dd35e><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-205dd35e><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"></path></svg><span class="visually-hidden" data-v-205dd35e>slack</span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-d7d748c2 data-v-2379f326><span class="container" data-v-2379f326><span class="top" data-v-2379f326></span><span class="middle" data-v-2379f326></span><span class="bottom" data-v-2379f326></span></span></button></div></div></div><!----></header><div class="VPLocalNav" data-v-c66ff1de data-v-2d7b81c3><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2d7b81c3><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-2d7b81c3><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-2d7b81c3>Menu</span></button><a class="top-link" href="#" data-v-2d7b81c3> Return to top </a></div><aside class="VPSidebar" data-v-c66ff1de data-v-0970777a><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-0970777a><span class="visually-hidden" id="sidebar-aria-label" data-v-0970777a> Sidebar Navigation </span><!--[--><div class="group" data-v-0970777a><section class="VPSidebarGroup collapsible" data-v-0970777a data-v-5973b055><div class="title" role="button" data-v-5973b055><h2 class="title-text" data-v-5973b055>前端指南</h2><div class="action" data-v-5973b055><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewbox="0 0 24 24" class="icon minus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2zM20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h8c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="icon plus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2z M20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11h-3V8c0-0.6-0.4-1-1-1s-1,0.4-1,1v3H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h3v3c0,0.6,0.4,1,1,1s1-0.4,1-1v-3h3c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg></div></div><div class="items" data-v-5973b055><!--[--><a class="VPLink link" href="/note/guide/vue3-upgrade.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Vue3.0 项目升级到 Vue3.2</span><!--]--><!----></a><a class="VPLink link" href="/note/guide/vue3-tinymce.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Vue3 富文本编辑器</span><!--]--><!----></a><a class="VPLink link" href="/note/guide/vue3-i18n.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>vue3 国际化(i18n)</span><!--]--><!----></a><a class="VPLink link" href="/note/guide/flutter-mall.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Flutter 2 商城App实战指南</span><!--]--><!----></a><a class="VPLink link" href="/note/guide/flutter-weiget.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Flutter 布局相关</span><!--]--><!----></a><a class="VPLink link" href="/note/guide/flutter-const.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Flutter 语法相关</span><!--]--><!----></a><a class="VPLink link" href="/note/guide/docker-compose.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Docker 部署 Node 项目</span><!--]--><!----></a><a class="VPLink link" href="/note/guide/docker-github.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Docker GitHub 集成工作流</span><!--]--><!----></a><!--]--></div></section></div><div class="group" data-v-0970777a><section class="VPSidebarGroup collapsible" data-v-0970777a data-v-5973b055><div class="title" role="button" data-v-5973b055><h2 class="title-text" data-v-5973b055>踩坑心得</h2><div class="action" data-v-5973b055><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewbox="0 0 24 24" class="icon minus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2zM20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h8c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="icon plus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2z M20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11h-3V8c0-0.6-0.4-1-1-1s-1,0.4-1,1v3H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h3v3c0,0.6,0.4,1,1,1s1-0.4,1-1v-3h3c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg></div></div><div class="items" data-v-5973b055><!--[--><a class="VPLink link" href="/note/feelings/vue3-waterfall-flow.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Vue3 瀑布流列表组件封装</span><!--]--><!----></a><a class="VPLink link" href="/note/feelings/js-lazy-load.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>JS 图片懒加载</span><!--]--><!----></a><a class="VPLink link" href="/note/feelings/el-date-picker.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Element 日期组件范围选择</span><!--]--><!----></a><a class="VPLink link" href="/note/feelings/a-upload.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Antd vue Upload 自定义上传</span><!--]--><!----></a><a class="VPLink link" href="/note/feelings/echarts-wordcloud.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Echarts 词云图</span><!--]--><!----></a><!--]--></div></section></div><div class="group" data-v-0970777a><section class="VPSidebarGroup collapsible" data-v-0970777a data-v-5973b055><div class="title" role="button" data-v-5973b055><h2 class="title-text" data-v-5973b055>Git / Node / Npm</h2><div class="action" data-v-5973b055><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewbox="0 0 24 24" class="icon minus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2zM20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h8c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="icon plus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2z M20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11h-3V8c0-0.6-0.4-1-1-1s-1,0.4-1,1v3H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h3v3c0,0.6,0.4,1,1,1s1-0.4,1-1v-3h3c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg></div></div><div class="items" data-v-5973b055><!--[--><a class="VPLink link active" href="/note/node/git-npm.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Git &amp; Npm 常用指令</span><!--]--><!----></a><!--]--></div></section></div><div class="group" data-v-0970777a><section class="VPSidebarGroup collapsible" data-v-0970777a data-v-5973b055><div class="title" role="button" data-v-5973b055><h2 class="title-text" data-v-5973b055>青山物语</h2><div class="action" data-v-5973b055><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewbox="0 0 24 24" class="icon minus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2zM20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h8c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="icon plus" data-v-5973b055><path d="M19,2H5C3.3,2,2,3.3,2,5v14c0,1.7,1.3,3,3,3h14c1.7,0,3-1.3,3-3V5C22,3.3,20.7,2,19,2z M20,19c0,0.6-0.4,1-1,1H5c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1h14c0.6,0,1,0.4,1,1V19z"></path><path d="M16,11h-3V8c0-0.6-0.4-1-1-1s-1,0.4-1,1v3H8c-0.6,0-1,0.4-1,1s0.4,1,1,1h3v3c0,0.6,0.4,1,1,1s1-0.4,1-1v-3h3c0.6,0,1-0.4,1-1S16.6,11,16,11z"></path></svg></div></div><div class="items" data-v-5973b055><!--[--><a class="VPLink link" href="/note/tale/hualang.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>🏞 青山画廊</span><!--]--><!----></a><a class="VPLink link" href="/note/tale/hexo-create.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>Hexo 博客搭建简易教程</span><!--]--><!----></a><a class="VPLink link" href="/note/tale/p1-zongjie.html" data-v-5973b055 data-v-ded4328e data-v-32407edf><!--[--><span class="link-text" data-v-ded4328e>P1 攻城狮的江湖总结</span><!--]--><!----></a><!--]--></div></section></div><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-c66ff1de data-v-580a4f65><div class="VPDoc has-sidebar" data-v-580a4f65 data-v-594e0a10><div class="container" data-v-594e0a10><div class="aside" data-v-594e0a10><div class="aside-curtain" data-v-594e0a10></div><div class="aside-container" data-v-594e0a10><div class="aside-content" data-v-594e0a10><div class="VPDocAside" data-v-594e0a10 data-v-6d380436><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline has-outline" data-v-6d380436 data-v-55303134><div class="content" data-v-55303134><div class="outline-marker" data-v-55303134></div><div class="outline-title" data-v-55303134>﹌﹋文章目录﹋﹌</div><nav aria-labelledby="doc-outline-aria-label" data-v-55303134><span class="visually-hidden" id="doc-outline-aria-label" data-v-55303134> Table of Contents for current page </span><ul class="root" data-v-55303134><!--[--><li style="" data-v-55303134><a class="outline-link" href="#shell-运算符" data-v-55303134>Shell 运算符</a><!----></li><li style="" data-v-55303134><a class="outline-link" href="#git-常用命令行" data-v-55303134>Git 常用命令行</a><!----></li><li style="" data-v-55303134><a class="outline-link" href="#npm-常用命令行" data-v-55303134>npm 常用命令行</a><!----></li><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-6d380436></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-594e0a10><div class="content-container" data-v-594e0a10><!--[--><!--]--><main class="main" data-v-594e0a10><div style="position:relative;" class="vp-doc _note_node_git-npm" data-v-594e0a10><div><h1 id="git-npm-常用指令" tabindex="-1">Git &amp; Npm 常用指令 <a class="header-anchor" href="#git-npm-常用指令" aria-hidden="true">#</a></h1><h2 id="shell-运算符" tabindex="-1">Shell 运算符 <a class="header-anchor" href="#shell-运算符" aria-hidden="true">#</a></h2><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#89DDFF;">&amp;</span><span style="color:#A6ACCD;">  表示任务在后台执行。</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> 表示前一条命令执行成功时，才执行后一条命令</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;">|</span><span style="color:#A6ACCD;">  表示管道，上一条命令的输出，作为下一条命令参数</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;">||</span><span style="color:#A6ACCD;"> 表示上一条命令执行失败后，才执行下一条命令</span></span>
<span class="line"></span>
<span class="line"><span style="color:#89DDFF;">;</span><span style="color:#A6ACCD;">  表示不管前面的命令如何，后面的都会执行</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">sudo chmod +x filePath 给文件添加执行权限</span></span>
<span class="line"></span></code></pre></div><h2 id="git-常用命令行" tabindex="-1">Git 常用命令行 <a class="header-anchor" href="#git-常用命令行" aria-hidden="true">#</a></h2><h3 id="初始化-git-项目到远程仓库" tabindex="-1">初始化 git 项目到远程仓库 <a class="header-anchor" href="#初始化-git-项目到远程仓库" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#A6ACCD;">mkdir drawingboard</span></span>
<span class="line"><span style="color:#82AAFF;">cd</span><span style="color:#A6ACCD;"> drawingboard</span></span>
<span class="line"><span style="color:#A6ACCD;">git init</span></span>
<span class="line"><span style="color:#A6ACCD;">touch README.md</span></span>
<span class="line"><span style="color:#A6ACCD;">git add README.md</span></span>
<span class="line"><span style="color:#A6ACCD;">git commit -m </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">first commit</span><span style="color:#89DDFF;">&quot;</span></span>
<span class="line"><span style="color:#A6ACCD;">git remote add origin https://github.com/jsdawn/xxx.git</span></span>
<span class="line"><span style="color:#A6ACCD;">git push -u origin master</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;">#查看远程地址</span></span>
<span class="line"><span style="color:#A6ACCD;">git remote -v</span></span>
<span class="line"></span></code></pre></div><h3 id="git-新建分支" tabindex="-1">git 新建分支 <a class="header-anchor" href="#git-新建分支" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 新建分支</span></span>
<span class="line"><span style="color:#A6ACCD;">git branch dev</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 检出分支</span></span>
<span class="line"><span style="color:#A6ACCD;">git checkout dev</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 新建并检出分支</span></span>
<span class="line"><span style="color:#A6ACCD;">git checkout -b dev</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 推送新分支到远程</span></span>
<span class="line"><span style="color:#A6ACCD;">git push origin dev</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 本地dev关联远程分支</span></span>
<span class="line"><span style="color:#A6ACCD;">git branch --set-upstream-to origin/dev</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div><h3 id="git-删除远程仓库文件" tabindex="-1">git 删除远程仓库文件 <a class="header-anchor" href="#git-删除远程仓库文件" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 适用于未跟踪文件的远程删除</span></span>
<span class="line"><span style="color:#A6ACCD;">git rm -r --cached path/subpath</span></span>
<span class="line"></span></code></pre></div><h3 id="git-rebase-工作流" tabindex="-1">git rebase 工作流 <a class="header-anchor" href="#git-rebase-工作流" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 切换到主分支,拉取最新代码</span></span>
<span class="line"><span style="color:#A6ACCD;">git checkout master</span></span>
<span class="line"><span style="color:#A6ACCD;">git pull</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 切换到本地分支</span></span>
<span class="line"><span style="color:#A6ACCD;">git checkout </span><span style="color:#C792EA;">local</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 合并本地多个提交 HEAD~2 -前两个</span></span>
<span class="line"><span style="color:#A6ACCD;">git rebase -i HEAD~2</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># or 合并指定 commit 36224db（不包含）~ HEAD</span></span>
<span class="line"><span style="color:#A6ACCD;">git rebase -i 36224db</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 将master 内容同步到当前分支 （当前local分支）</span></span>
<span class="line"><span style="color:#A6ACCD;">git rebase master ---</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> 解决冲突 ---</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> git rebase --continue</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 切换回主分支进行合并</span></span>
<span class="line"><span style="color:#A6ACCD;">git checkout master</span></span>
<span class="line"><span style="color:#A6ACCD;">git merge </span><span style="color:#C792EA;">local</span></span>
<span class="line"><span style="color:#A6ACCD;">git push</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div><h3 id="git-生成-添加-ssh-公钥" tabindex="-1">git 生成/添加 SSH 公钥 <a class="header-anchor" href="#git-生成-添加-ssh-公钥" aria-hidden="true">#</a></h3><p>1.生成一个 gitee 用的 SSH-Key</p><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#A6ACCD;">ssh-keygen -t rsa -C </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">xxx</span><span style="color:#89DDFF;">&#39;</span><span style="color:#A6ACCD;"> -f </span><span style="color:#89DDFF;">~</span><span style="color:#A6ACCD;">/.ssh/gitee_id_rsa</span></span>
<span class="line"></span></code></pre></div><p>2.生成一个 github 用的 SSH-Key</p><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#A6ACCD;">ssh-keygen -t rsa -C </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">xxx</span><span style="color:#89DDFF;">&#39;</span><span style="color:#A6ACCD;"> -f </span><span style="color:#89DDFF;">~</span><span style="color:#A6ACCD;">/.ssh/github_id_rsa</span></span>
<span class="line"></span></code></pre></div><p>3.在 ~/.ssh 目录下新建一个 config 文件，添加如下内容（其中 Host 和 HostName 填写 git 服务器的域名，IdentityFile 指定私钥的路径）</p><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># gitee</span></span>
<span class="line"><span style="color:#A6ACCD;">Host gitee.com</span></span>
<span class="line"><span style="color:#A6ACCD;">HostName gitee.com</span></span>
<span class="line"><span style="color:#A6ACCD;">PreferredAuthentications publickey</span></span>
<span class="line"><span style="color:#A6ACCD;">IdentityFile </span><span style="color:#89DDFF;">~</span><span style="color:#A6ACCD;">/.ssh/gitee_id_rsa</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># github</span></span>
<span class="line"><span style="color:#A6ACCD;">Host github.com</span></span>
<span class="line"><span style="color:#A6ACCD;">HostName github.com</span></span>
<span class="line"><span style="color:#A6ACCD;">PreferredAuthentications publickey</span></span>
<span class="line"><span style="color:#A6ACCD;">IdentityFile </span><span style="color:#89DDFF;">~</span><span style="color:#A6ACCD;">/.ssh/github_id_rsa</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># my service 私有服务器</span></span>
<span class="line"><span style="color:#A6ACCD;">Host 127.xx.x.x</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># Port xxxx</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># HostName xxxx.com</span></span>
<span class="line"><span style="color:#A6ACCD;">PreferredAuthentications publickey</span></span>
<span class="line"><span style="color:#A6ACCD;">IdentityFile </span><span style="color:#89DDFF;">~</span><span style="color:#A6ACCD;">/.ssh/my_id_rsa</span></span>
<span class="line"></span></code></pre></div><p>4.用 ssh 命令分别测试</p><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#A6ACCD;">ssh -T git@gitee.com</span></span>
<span class="line"><span style="color:#A6ACCD;">ssh -T git@github.com</span></span>
<span class="line"><span style="color:#A6ACCD;">ssh -T root@127.xx.x.x</span></span>
<span class="line"></span></code></pre></div><h3 id="git-子模块" tabindex="-1">git 子模块 <a class="header-anchor" href="#git-子模块" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 初始化子模块本地配置</span></span>
<span class="line"><span style="color:#A6ACCD;">git submodule init</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 抓取并检出</span></span>
<span class="line"><span style="color:#A6ACCD;">git submodule update</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># clone 的同时初始化和优化每个子模块</span></span>
<span class="line"><span style="color:#A6ACCD;">git clone --recurse-submodules xxx</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 拉取更新的同时拉取子模块更新</span></span>
<span class="line"><span style="color:#A6ACCD;">git pull --recurse-submodules</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 将新的 URL 复制到本地配置中</span></span>
<span class="line"><span style="color:#A6ACCD;">git submodule sync --recursive</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 从新 URL 更新子模块</span></span>
<span class="line"><span style="color:#A6ACCD;">git submodule update --init --recursive</span></span>
<span class="line"></span></code></pre></div><h3 id="github-链接失败，修改-dns" tabindex="-1">github 链接失败，修改 DNS <a class="header-anchor" href="#github-链接失败，修改-dns" aria-hidden="true">#</a></h3><ul><li><a href="https://ipaddress.com/" target="_blank" rel="noopener noreferrer">https://ipaddress.com/</a> 查询 ip 地址</li><li>添加本地 hosts (指令：sudo vim /etc/hosts)</li></ul><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># ip..    domain</span></span>
<span class="line"><span style="color:#A6ACCD;">xxx       github.com</span></span>
<span class="line"><span style="color:#A6ACCD;">xxx       raw.githubusercontent.com</span></span>
<span class="line"></span></code></pre></div><h3 id="git-missing-xcrun" tabindex="-1">git missing xcrun <a class="header-anchor" href="#git-missing-xcrun" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#A6ACCD;">$ git -v</span></span>
<span class="line"><span style="color:#A6ACCD;">xcrun: error: invalid active developer path </span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;">/Applications/Xcode.app/Contents/Developer</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;">, missing xcrun at: /Applications/Xcode.app/Contents/Developer/usr/bin/xcrun</span></span>
<span class="line"></span></code></pre></div><p>mac 下未安装 xcode，git 也使用不了。通过切换路径修复</p><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 重 xcodeslect 路径</span></span>
<span class="line"><span style="color:#A6ACCD;">$ sudo xcode-select -r</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 切换路径</span></span>
<span class="line"><span style="color:#A6ACCD;">$ sudo xcode-select --switch /Library/Developer/CommandLineTools</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 查看路径</span></span>
<span class="line"><span style="color:#A6ACCD;">$ sudo xcode-select -p</span></span>
<span class="line"></span></code></pre></div><h2 id="npm-常用命令行" tabindex="-1">npm 常用命令行 <a class="header-anchor" href="#npm-常用命令行" aria-hidden="true">#</a></h2><h3 id="nrm-镜像源" tabindex="-1">nrm 镜像源 <a class="header-anchor" href="#nrm-镜像源" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># npm 镜像源管理器</span></span>
<span class="line"><span style="color:#A6ACCD;">npm i -g nrm</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># npm 查看源</span></span>
<span class="line"><span style="color:#A6ACCD;">nrm ls</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># npm 使用指定源</span></span>
<span class="line"><span style="color:#A6ACCD;">nrm use npm</span></span>
<span class="line"></span></code></pre></div><h3 id="nvm-node-版本管理工具" tabindex="-1">nvm node 版本管理工具 <a class="header-anchor" href="#nvm-node-版本管理工具" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 安装最新稳定版</span></span>
<span class="line"><span style="color:#A6ACCD;">nvm install stable</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 安装指定版本</span></span>
<span class="line"><span style="color:#A6ACCD;">nvm install </span><span style="color:#89DDFF;">&lt;</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 卸载指定版本</span></span>
<span class="line"><span style="color:#A6ACCD;">nvm uninstall </span><span style="color:#89DDFF;">&lt;</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 切换使用指定版本</span></span>
<span class="line"><span style="color:#A6ACCD;">nvm use </span><span style="color:#89DDFF;">&lt;</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 列出已安装版本</span></span>
<span class="line"><span style="color:#A6ACCD;">nvm ls</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 设置node默认版本</span></span>
<span class="line"><span style="color:#A6ACCD;">nvm </span><span style="color:#82AAFF;">alias</span><span style="color:#A6ACCD;"> default </span><span style="color:#89DDFF;">&lt;</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">&gt;</span></span>
<span class="line"></span></code></pre></div><p>安装了 nvm，找不到 node 和 npm？</p><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 在~/.bashrc 或 ~/.zshrc添加</span></span>
<span class="line"><span style="color:#C792EA;">export</span><span style="color:#A6ACCD;"> NVM_DIR=</span><span style="color:#89DDFF;">&quot;$</span><span style="color:#A6ACCD;">HOME</span><span style="color:#C3E88D;">/.nvm</span><span style="color:#89DDFF;">&quot;</span></span>
<span class="line"><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">-s</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;$</span><span style="color:#A6ACCD;">NVM_DIR</span><span style="color:#C3E88D;">/nvm.sh</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> \. </span><span style="color:#89DDFF;">&quot;$</span><span style="color:#A6ACCD;">NVM_DIR</span><span style="color:#C3E88D;">/nvm.sh</span><span style="color:#89DDFF;">&quot;</span></span>
<span class="line"></span></code></pre></div><h3 id="yarn-1-x-更快的依赖管理工具" tabindex="-1">yarn@1.x 更快的依赖管理工具 <a class="header-anchor" href="#yarn-1-x-更快的依赖管理工具" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 添加依赖包</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn add </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn add </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;">@</span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">]</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn add </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;">@</span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">tag</span><span style="color:#89DDFF;">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 将依赖项添加到不同依赖项类别中</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn add </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;"> --dev</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn add </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;"> --peer</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn add </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;"> --optional</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 升级依赖包</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn upgrade </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn upgrade </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;">@</span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">]</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn upgrade </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span><span style="color:#A6ACCD;">@</span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">tag</span><span style="color:#89DDFF;">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 重新安装所有包</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn install --force</span></span>
<span class="line"></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># 移除依赖包</span></span>
<span class="line"><span style="color:#A6ACCD;">yarn remove </span><span style="color:#89DDFF;">[</span><span style="color:#A6ACCD;">package</span><span style="color:#89DDFF;">]</span></span>
<span class="line"></span></code></pre></div><h3 id="ssh-远程连接服务器" tabindex="-1">ssh 远程连接服务器 <a class="header-anchor" href="#ssh-远程连接服务器" aria-hidden="true">#</a></h3><div class="language-sh"><span class="copy"></span><pre><code><span class="line"><span style="color:#676E95;font-style:italic;"># 密码认证</span></span>
<span class="line"><span style="color:#A6ACCD;">ssh root@xxx.xxx.xx.xx</span></span>
<span class="line"></span></code></pre></div><blockquote><p><strong>转载声明</strong>： 请注明作者，注明原文链接，有疑问致邮 <a href="mailto:kingwyh1993@163.com">kingwyh1993@163.com</a></p></blockquote></div></div></main><footer class="VPDocFooter" data-v-594e0a10 data-v-a2c60774><div class="edit-info" data-v-a2c60774><div class="edit-link" data-v-a2c60774><a class="VPLink link edit-link-button" href="https://github.com/jsdawn/note/edit/master/docs/node/git-npm.md" target="_blank" rel="noopener noreferrer" data-v-a2c60774 data-v-32407edf><!--[--><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="edit-link-icon" data-v-a2c60774><path d="M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"></path><path d="M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"></path></svg> Edit this page on github<!--]--><!----></a></div><div class="last-updated" data-v-a2c60774><p class="VPLastUpdated" data-v-a2c60774 data-v-16d7c010>Updated Date: <time datatime="2022-08-24T10:35:40.000Z" data-v-16d7c010></time></p></div></div><div class="prev-next" data-v-a2c60774><div class="pager" data-v-a2c60774><a class="pager-link prev" href="/note/feelings/echarts-wordcloud.html" data-v-a2c60774><span class="desc" data-v-a2c60774>Previous page</span><span class="title" data-v-a2c60774>Echarts 词云图</span></a></div><div class="has-prev pager" data-v-a2c60774><a class="pager-link next" href="/note/tale/hualang.html" data-v-a2c60774><span class="desc" data-v-a2c60774>Next page</span><span class="title" data-v-a2c60774>🏞 青山画廊</span></a></div></div></footer><!--[--><!--]--></div></div></div></div></div><footer class="VPFooter has-sidebar" data-v-c66ff1de data-v-758a7cec><div class="container" data-v-758a7cec><p class="message" data-v-758a7cec>Released under the Apache License 2.0 License.</p><p class="copyright" data-v-758a7cec>Copyright © 2022-present 青山依旧</p></div></footer><!--[--><!--]--></div></div>
    <script>__VP_HASH_MAP__ = JSON.parse("{\"components_index.md\":\"c71eaabc\",\"feelings_a-upload.md\":\"c24f19c1\",\"feelings_echarts-wordcloud.md\":\"49f7ba66\",\"feelings_el-date-picker.md\":\"f1052dce\",\"feelings_js-lazy-load.md\":\"866a6573\",\"feelings_vue3-waterfall-flow.md\":\"d38323f6\",\"guide_docker-compose.md\":\"61ab6185\",\"guide_docker-github.md\":\"38b70b85\",\"guide_flutter-const.md\":\"db61f59e\",\"guide_flutter-mall.md\":\"053d420a\",\"guide_flutter-weiget.md\":\"35457cf1\",\"guide_vue3-i18n.md\":\"ef8b8776\",\"guide_vue3-tinymce.md\":\"d6c4784e\",\"guide_vue3-upgrade.md\":\"c0d0a296\",\"index.md\":\"42f45fbc\",\"node_git-npm.md\":\"94662dbd\",\"tale_hexo-create.md\":\"9496a4e9\",\"tale_hualang.md\":\"3079cb8f\",\"tale_p1-zongjie.md\":\"50509583\",\"widgets_index.md\":\"f7612fd9\"}")</script>
    <script type="module" async src="/note/assets/app.6518bc14.js"></script>
    
  </body>
</html>